package com.xb.loan.encryptor.comm.protocol.impl;


import com.xb.loan.encryptor.bean.LotteryBean;
import com.xb.loan.encryptor.comm.protocol.Encoder;
import com.xb.loan.util.binaryConvert.BinaryParseUtil;
import com.xb.loan.util.binaryConvert.ConvertUtil;
import com.xb.loan.util.binaryConvert.CryptUtil;
import com.xb.loan.util.binaryConvert.parse.str.StringParser;

public class EncoderImpl implements Encoder {
	
	private StringParser strParser = new StringParser();

	@Override
	public byte[] encode(Object obj) {
		
		LotteryBean bean = (LotteryBean) obj;
		// 加密原始数据
		byte[] rawData = BinaryParseUtil.format(bean);
		// 加密后的数据
		byte[] cryptData = new byte[rawData.length + 1];
		// 数据加密
		CryptUtil.encode(rawData, cryptData, rawData.length);
		// 协议号
		byte[] transCodeBits = strParser.format(bean.getHead().getTranscode(), null);
		// 最终数据
		byte[] sendData = new byte[cryptData.length + transCodeBits.length + 4];
		// 添加数据包长度
		ConvertUtil.putShort(sendData, 0, (short) (sendData.length - 2));
		// 添加协议版本号
		sendData[2] = 1;
		// 添加协议小版本号
		sendData[3] = 0;
		// 添加transcode
		ConvertUtil.put(sendData, 4, transCodeBits);
		// 添加消息内容
		ConvertUtil.put(sendData, 4 + transCodeBits.length, cryptData);
		
		return sendData;
	}

}
